热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多种|抽象性_4种主流的API架构风格对比

篇首语:本文由编程笔记#小编为大家整理,主要介绍了4种主流的API架构风格对比相关的知识,希望对你有一定的参考价值。RPC使用GET来获

篇首语:本文由编程笔记#小编为大家整理,主要介绍了4 种主流的 API 架构风格对比相关的知识,希望对你有一定的参考价值。


RPC 使用 GET 来获取信息,使用 POST 来处理其他所有操作。服务端和客户端之间交互的机制归结为调用端点并获得响应。

易于添加新函数。 如果 API 有了新的需求,我们可以轻松地添加另一个执行这个需求的端点:1)编写一个新函数,并将其放在一个新端点之后;2)现在,客户可以访问这个端点,并获取符合其需求的信息。

高性能。 轻量级的有效负载不会对网络产生压力,以此提供高性能,这对于共享服务器和在工作站网络上执行并行计算非常重要。RPC 还能够优化网络层,使得不同服务之间每天发送海量消息变得非常高效。

内置创建 Web 服务的功能使得 SOAP 能够处理消息通信的同时发送独立于语言和平台响应。

绑定到各种协议。 SOAP 在适用于多种场景的传输协议方面是十分灵活的。

内置错误处理。 SOAP API 规范允许返回带有错误码及其说明的的 XML 重试消息。

一系列的安全拓展。 SOAP 与 ES-Security 集成,因此 SOAP 可满足企业级事务要求。它在事务内部提供了隐私和完整性,同时允许在消息级别进行加密。

SOAP 消息级别的安全性:在标头元素的认证数据以及加密的正文
SOAP 消息包含大量的元数据,并且在请求和响应时仅支持繁冗的 XML 格式。
  • 重量级。 由于 XML 文件的大小,SOAP 服务需要很大的带宽。
  • 非常专业化的知识。 构建 SOAP API 服务器需要对所有涉及到的协议以及它们及其严格的限制都有很深的了解。
  • 乏味的消息更新。 由于需要额外的工作来添加或者删除某个消息属性,这种死板的 SOAP 模式减慢了其被采用的速度。
  • 由于 REST 尽可能地解耦了客户端和服务端,REST 相较于 RPC 可以提供更好的抽象性。具有抽象级别的系统能够封装其实现细节,以更好的标示和维持它的属性。这使得 REST API 足够灵活,可以随着时间的推移而发展,同时保持稳定的系统。

    可发现性: 客户端和服务端之间的通信描述了所有内容,因此不需要外部文档即可了解如何与 REST API 进行交互。

    缓存友好: REST 重用了许多 HTTP 工具,也是唯一一种可以在 HTTP 层面上缓存数据的 API 架构风格。与其相对的是,在任何其他 API 上实现缓存都需要配置其他缓存模块。

    多种格式支持: REST 拥有支持多种格式用于存储和交换数据的能力,这是它如今成为搭建公共 API 的主要选择的原因之一。

    在用于连接不需要查询灵活性的资源驱动型应用时,REST 是一种非常有效的方法。

    GraphQL 提前公开了它能做什么,从而提高了其可发现性。通过将客户端指向 GraphQL API,我们可以发现什么查询语句是可用的。

    没有版本控制: 版本控制的最佳实践是不要对 API 进行版本控制。

    尽管 REST 提供了不同的 API 版本,GraphQL 使用的是不断更新的单一版本,这使用户可以持续访问新功能,并有助于提供更整洁、更可维护的服务器代码。

    详细的错误消息: GraphQL 以类似于 SOAP 的方式提供所发生错误的详细信息。它的错误消息包括所有解析器,并指向确切的发生故障时的查询部分。

    灵活的权限: GraphQL 允许选择性地公开某些功能,同时保留私人信息。而相对应的是,REST 体系架构不能仅显示部分数据,要么是全部数据,要么是没有数据。

    GraphQL 权衡了复杂性,来实现其强大功能。一个请求中的嵌套字段太多会导致系统过载。因此,对于复杂的查询,REST 仍然是更好的选择。

    缓存复杂度。 由于 GraphQL 不再使用 HTTP 缓存语义,因此使用者需要额外自定义缓存。

    大量的预开发教育。 由于没有足够的时间来了解 GraphQL 的某个操作和 SDL,因此许多项目决定采用众所周知的 REST 方法。

    在这种情况下,网络性能和单个消息有效负载优化很重要。因此,GraphQL 为移动设备提供了更有效的数据加载方式。

    复杂的系统和微服务。 GraphQL 能够隐藏其 API 背后的多个系统集成的复杂性。GraphQL 从多个地方聚合数据,并将它们合并为一个全局的模式。对于随时间推移而逐渐扩展的遗留基础架构或第三方 API 来说,这尤其重要。

    5.哪种 API 模式最适用你的用例?

    每个 API 项目都有不同的限制和需求。通常,API 架构的选择取决于:

  • 所使用的编程语言,

  • 你的开发环境,以及

  • 你的资源预算,包括人力资源和财务资源。

  • 在了解了每种设计风格的利与弊之后,API 设计人员可以选择最适合项目的那一种。

  • 具有强耦合性的 RPC 很适用于内部微服务,但它对外部 API 或者 API 服务而言不是一个好的选择。

  • SOAP 的使用有些麻烦,但它强大的安全拓展使它在计费操作、预订系统和支付方面是无可替代的。

  • REST 是针对 API 的最高级别的抽象和最佳模型。但它往往会有些“啰嗦”而增加系统的负担 —— 如果你使用的是移动设备,这是个问题。

  • GraphQL 在数据获取方面向前迈出了一大步,但并不是每个人都有足够的时间后精力来掌握它。

  • 归根结底,去针对一些小型的用例来尝试某种特定 API 架构,并去了解它是否适合你的用例以及是否解决了你的问题,这样做是比较合适的。如果它适用于你的用例,就可以尝试扩展并查看它是否适用于更多的用例。

    来源:infoQ

    推荐:

    主流Java进阶技术(学习资料分享)

    PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。“在看”支持我们吧!  

    推荐阅读
    • REST与RPC:选择哪种API架构风格?
      在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
    • 深入理解SAP Fiori及其核心概念
      本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
    • Web3隐私协议Manta Network与区块链互操作性平台Axelar达成战略合作,共同推进跨链资产的隐私保护。 ... [详细]
    • 匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上)
      匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上) ... [详细]
    • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
    • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
    • SSAS入门指南:基础知识与核心概念解析
      ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
    • 序列化概念
      一、概述序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。.NETFramework提供两 ... [详细]
    • PHP网站部署指南:从零开始搭建PHP网站
      本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
    • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
    • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
    • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
    • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
    • 之前学习过get信息的方法,就是通过接口得到数据,然后对数据进行处理json处理和xml处理最近学习了post,所以小小的总结一下先说一下使用系统的NSURLConnectio ... [详细]
    • 将generic.list转换为ArrayOfInt,以便通过SOAP传输到Web服务我正在尝试使用SOAP协议将一个通用的整数列表从客户端应用程序传递给Web服务。当我尝试将列表 ... [详细]
    author-avatar
    娶位红太郎_442
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有